/*
 * Copyright (c) 2007, 2021, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.sun.org.apache.bcel.internal.generic;

/**
 * Interface implementing the Visitor pattern programming style.
 * I.e., a class that implements this interface can handle all types of
 * instructions with the properly typed methods just by calling the accept()
 * method.
 */
public interface Visitor {

    void visitStackInstruction(StackInstruction obj);


    void visitLocalVariableInstruction(LocalVariableInstruction obj);


    void visitBranchInstruction(BranchInstruction obj);


    void visitLoadClass(LoadClass obj);


    void visitFieldInstruction(FieldInstruction obj);


    void visitIfInstruction(IfInstruction obj);


    void visitConversionInstruction(ConversionInstruction obj);


    void visitPopInstruction(PopInstruction obj);


    void visitStoreInstruction(StoreInstruction obj);


    void visitTypedInstruction(TypedInstruction obj);


    void visitSelect(Select obj);


    void visitJsrInstruction(JsrInstruction obj);


    void visitGotoInstruction(GotoInstruction obj);


    void visitUnconditionalBranch(UnconditionalBranch obj);


    void visitPushInstruction(PushInstruction obj);


    void visitArithmeticInstruction(ArithmeticInstruction obj);


    void visitCPInstruction(CPInstruction obj);


    void visitInvokeInstruction(InvokeInstruction obj);


    void visitArrayInstruction(ArrayInstruction obj);


    void visitAllocationInstruction(AllocationInstruction obj);


    void visitReturnInstruction(ReturnInstruction obj);


    void visitFieldOrMethod(FieldOrMethod obj);


    void visitConstantPushInstruction(ConstantPushInstruction obj);


    void visitExceptionThrower(ExceptionThrower obj);


    void visitLoadInstruction(LoadInstruction obj);


    void visitVariableLengthInstruction(VariableLengthInstruction obj);


    void visitStackProducer(StackProducer obj);


    void visitStackConsumer(StackConsumer obj);


    void visitACONST_NULL(ACONST_NULL obj);


    void visitGETSTATIC(GETSTATIC obj);


    void visitIF_ICMPLT(IF_ICMPLT obj);


    void visitMONITOREXIT(MONITOREXIT obj);


    void visitIFLT(IFLT obj);


    void visitLSTORE(LSTORE obj);


    void visitPOP2(POP2 obj);


    void visitBASTORE(BASTORE obj);


    void visitISTORE(ISTORE obj);


    void visitCHECKCAST(CHECKCAST obj);


    void visitFCMPG(FCMPG obj);


    void visitI2F(I2F obj);


    void visitATHROW(ATHROW obj);


    void visitDCMPL(DCMPL obj);


    void visitARRAYLENGTH(ARRAYLENGTH obj);


    void visitDUP(DUP obj);


    void visitINVOKESTATIC(INVOKESTATIC obj);


    void visitLCONST(LCONST obj);


    void visitDREM(DREM obj);


    void visitIFGE(IFGE obj);


    void visitCALOAD(CALOAD obj);


    void visitLASTORE(LASTORE obj);


    void visitI2D(I2D obj);


    void visitDADD(DADD obj);


    void visitINVOKESPECIAL(INVOKESPECIAL obj);


    void visitIAND(IAND obj);


    void visitPUTFIELD(PUTFIELD obj);


    void visitILOAD(ILOAD obj);


    void visitDLOAD(DLOAD obj);


    void visitDCONST(DCONST obj);


    void visitNEW(NEW obj);


    void visitIFNULL(IFNULL obj);


    void visitLSUB(LSUB obj);


    void visitL2I(L2I obj);


    void visitISHR(ISHR obj);


    void visitTABLESWITCH(TABLESWITCH obj);


    void visitIINC(IINC obj);


    void visitDRETURN(DRETURN obj);


    void visitFSTORE(FSTORE obj);


    void visitDASTORE(DASTORE obj);


    void visitIALOAD(IALOAD obj);


    void visitDDIV(DDIV obj);


    void visitIF_ICMPGE(IF_ICMPGE obj);


    void visitLAND(LAND obj);


    void visitIDIV(IDIV obj);


    void visitLOR(LOR obj);


    void visitCASTORE(CASTORE obj);


    void visitFREM(FREM obj);


    void visitLDC(LDC obj);


    void visitBIPUSH(BIPUSH obj);


    void visitDSTORE(DSTORE obj);


    void visitF2L(F2L obj);


    void visitFMUL(FMUL obj);


    void visitLLOAD(LLOAD obj);


    void visitJSR(JSR obj);


    void visitFSUB(FSUB obj);


    void visitSASTORE(SASTORE obj);


    void visitALOAD(ALOAD obj);


    void visitDUP2_X2(DUP2_X2 obj);


    void visitRETURN(RETURN obj);


    void visitDALOAD(DALOAD obj);


    void visitSIPUSH(SIPUSH obj);


    void visitDSUB(DSUB obj);


    void visitL2F(L2F obj);


    void visitIF_ICMPGT(IF_ICMPGT obj);


    void visitF2D(F2D obj);


    void visitI2L(I2L obj);


    void visitIF_ACMPNE(IF_ACMPNE obj);


    void visitPOP(POP obj);


    void visitI2S(I2S obj);


    void visitIFEQ(IFEQ obj);


    void visitSWAP(SWAP obj);


    void visitIOR(IOR obj);


    void visitIREM(IREM obj);


    void visitIASTORE(IASTORE obj);


    void visitNEWARRAY(NEWARRAY obj);


    void visitINVOKEINTERFACE(INVOKEINTERFACE obj);


    void visitINEG(INEG obj);


    void visitLCMP(LCMP obj);


    void visitJSR_W(JSR_W obj);


    void visitMULTIANEWARRAY(MULTIANEWARRAY obj);


    void visitDUP_X2(DUP_X2 obj);


    void visitSALOAD(SALOAD obj);


    void visitIFNONNULL(IFNONNULL obj);


    void visitDMUL(DMUL obj);


    void visitIFNE(IFNE obj);


    void visitIF_ICMPLE(IF_ICMPLE obj);


    void visitLDC2_W(LDC2_W obj);


    void visitGETFIELD(GETFIELD obj);


    void visitLADD(LADD obj);


    void visitNOP(NOP obj);


    void visitFALOAD(FALOAD obj);


    void visitINSTANCEOF(INSTANCEOF obj);


    void visitIFLE(IFLE obj);


    void visitLXOR(LXOR obj);


    void visitLRETURN(LRETURN obj);


    void visitFCONST(FCONST obj);


    void visitIUSHR(IUSHR obj);


    void visitBALOAD(BALOAD obj);


    void visitDUP2(DUP2 obj);


    void visitIF_ACMPEQ(IF_ACMPEQ obj);


    void visitIMPDEP1(IMPDEP1 obj);


    void visitMONITORENTER(MONITORENTER obj);


    void visitLSHL(LSHL obj);


    void visitDCMPG(DCMPG obj);


    void visitD2L(D2L obj);


    void visitIMPDEP2(IMPDEP2 obj);


    void visitL2D(L2D obj);


    void visitRET(RET obj);


    void visitIFGT(IFGT obj);


    void visitIXOR(IXOR obj);


    void visitINVOKEVIRTUAL(INVOKEVIRTUAL obj);


    /**
     * @since 6.0
     */
    void visitINVOKEDYNAMIC(INVOKEDYNAMIC obj);


    void visitFASTORE(FASTORE obj);


    void visitIRETURN(IRETURN obj);


    void visitIF_ICMPNE(IF_ICMPNE obj);


    void visitFLOAD(FLOAD obj);


    void visitLDIV(LDIV obj);


    void visitPUTSTATIC(PUTSTATIC obj);


    void visitAALOAD(AALOAD obj);


    void visitD2I(D2I obj);


    void visitIF_ICMPEQ(IF_ICMPEQ obj);


    void visitAASTORE(AASTORE obj);


    void visitARETURN(ARETURN obj);


    void visitDUP2_X1(DUP2_X1 obj);


    void visitFNEG(FNEG obj);


    void visitGOTO_W(GOTO_W obj);


    void visitD2F(D2F obj);


    void visitGOTO(GOTO obj);


    void visitISUB(ISUB obj);


    void visitF2I(F2I obj);


    void visitDNEG(DNEG obj);


    void visitICONST(ICONST obj);


    void visitFDIV(FDIV obj);


    void visitI2B(I2B obj);


    void visitLNEG(LNEG obj);


    void visitLREM(LREM obj);


    void visitIMUL(IMUL obj);


    void visitIADD(IADD obj);


    void visitLSHR(LSHR obj);


    void visitLOOKUPSWITCH(LOOKUPSWITCH obj);


    void visitDUP_X1(DUP_X1 obj);


    void visitFCMPL(FCMPL obj);


    void visitI2C(I2C obj);


    void visitLMUL(LMUL obj);


    void visitLUSHR(LUSHR obj);


    void visitISHL(ISHL obj);


    void visitLALOAD(LALOAD obj);


    void visitASTORE(ASTORE obj);


    void visitANEWARRAY(ANEWARRAY obj);


    void visitFRETURN(FRETURN obj);


    void visitFADD(FADD obj);


    void visitBREAKPOINT(BREAKPOINT obj);
}
